CLCTN · CHANGING A COLLECTION'S TYPE · SEPTEMBER 2026
4 SCREENS · BUILT
The feature that makes every other type decision reversible.
A collector builds a custom type for their synths. Six months later we ship an official Synthesisers type — better, with a catalogue, a grading scale, valuation, a 3D model. Without migration, the reward for helping us is being stuck on the worse version of the thing you asked for. With it, the entire type system becomes provisional in a good way: pick wrong, move later, lose nothing.
Screens live in the prototype as migrate · remap · migrun · migdone. This is the model underneath them. It closes Q3 from the generic-type page.
01 · FOUR WAYS A COLLECTION CHANGES TYPE — ONE MACHINE
The custom-to-official case is the one worth designing for, but it is not special. Build the remapper generically and three other problems we already have stop being problems.
{{ c.k }}
{{ c.t }}
{{ c.b }}
{{ c.f }}
02 · THE PROMISE, STATED BEFORE THE MECHANICS
{{ p.k }}
{{ p.t }}
{{ p.b }}
03 · WHAT THE MAPPER PROPOSES, AND WHY
The screen opens with every field already mapped. A migration screen that starts empty is a data-entry job, and nobody finishes one. Four deterministic passes produce the proposal; the collector only ever corrects it.
Switch the source type in Tweaks — a hand-rolled custom type maps worse than a community one, because a shipped official type can carry an explicit supersedes: block written by us.
PASS
MATCHES ON
EXAMPLE
CONFIDENCE
{{ p.n }}
{{ p.t }}
{{ p.b }}
{{ p.ex }}
{{ p.c }}
No pass may silently drop a field. Anything unmatched after pass 04 becomes a custom field on the new type — the default is always keep it, never lose it, and the collector has to work to delete something.
{{ srcLabel }}
{{ autoPct }} AUTO
{{ supersedesYaml }}
{{ srcNote }}
04 · FIELD KIND → FIELD KIND, WHAT SURVIVES
The generic type offers four kinds; official types use eight. Most conversions are free, three are lossy, and the lossy ones are the only places the screen ever raises its voice.
FROM
TO
RESULT
WHAT THE COLLECTOR SEES
{{ m.from }}
{{ m.to }}
{{ m.r }}
{{ m.b }}
05 · THE HARD PART IS VALUES, NOT FIELDS
Mapping condition → condition is trivial and useless on its own. The collector wrote Clean, Played, Rough; the official scale has six grades with agreed meanings and a price attached to each. Getting this wrong misprices 47 objects, and every CSV importer in the world gets it wrong silently. So it is its own screen, with counts, because "21 objects become Good" is a decision and "condition maps to condition" is not.
{{ v.k }}
{{ v.t }}
{{ v.b }}
Never interpolate onto a finer scale. Three words cannot become six grades; they become three of the six, and the other three stay empty until the collector grades into them. An empty grade is honest. A machine-invented one corrupts the collection quietly and forever, and the collector will never know which values they actually wrote.
06 · THE FOUR SCREENS
{{ s.k }}
{{ s.n }}
{{ s.t }}
{{ s.b }}
{{ s.d }}
07 · SAFETY — WHY THIS IS A TRANSACTION AND NOT A LOOP
{{ s.k }}
{{ s.t }}
{{ s.b }}
MIGRATION RECORD · KEPT FOR 30 DAYS
{{ recordYaml }}
The snapshot is the undo. It is also the audit trail — the only way to answer "what did I actually write in that field before the app changed it", which is the question a collector asks two years later when a number looks wrong.
08 · STILL OPEN
{{ o.k }}
{{ o.q }}
{{ o.b }}